/**
 * @author rxliuli
 */
const validate = (() => {
    const {not} = rx.CombinedPredicate,
        {isBlank, isIpv4, isFloat} = rx.stringValidator

    // v => !isBlank(v) && !isIpv4(v)
    // not(or(isBlank, isIpv4))
    const notFloat = not(isFloat)
    const gt0 = v => parseFloat(v) <= 0
    return RxFormValidator.validator({
        rxElemValidators: [
            RxElemValidator.notBlank('houseId', '[所在机房] 不能为空'),
            RxElemValidator.notBlank('deviceName', '[监测设备名称] 不能为空'),
            RxElemValidator.notBlank('hostName', '[设备IP或主机名] 不能为空'),
            RxElemValidator.notBlank('ctrPort', '[控制端口] 不能为空'),
            RxElemValidator.notBlank('adminUser', '[管理用户名] 不能为空'),
            RxElemValidator.notBlank('adminPassword', '[管理密码] 不能为空'),
            /*RxElemValidator.notBlank('transientInput', '[瞬时流量进口] 不能为空'),
            RxElemValidator.notBlank('transientOutput', '[瞬时流量出口] 不能为空'),*/
            RxElemValidator.notBlank('connectType', '[接入方式] 不能为空'),
            RxElemValidator.notBlank('linkStatus', '[链路状态] 不能为空'),

            RxElemValidator.limitLen('deviceName', '[监测设备名称] 长度最大为 50 位', 50),
            RxElemValidator.limitLen('hostName', '[设备IP或主机名] 长度最大为 50 位', 50),
            RxElemValidator.limitLen('ctrPort', '[控制端口] 长度最大为 6 位', 6),
            RxElemValidator.limitLen('adminUser', '[管理用户名] 长度最大为 50 位', 50),
            RxElemValidator.limitLen('adminPassword', '[管理密码] 长度最大为 50 位', 50),

            RxElemValidator.create('ctrPort', '[控制端口] 必须为数值', notFloat),
            /*RxElemValidator.create('transientInput', '[瞬时流量进口] 必须为数值', notFloat),
            RxElemValidator.create('transientInput', '[瞬时流量进口] 必须大于 0', gt0),
            RxElemValidator.create('transientOutput', '[瞬时流量出口] 必须为数值', notFloat),
            RxElemValidator.create('transientOutput', '[瞬时流量出口] 必须大于 0', gt0),*/

            RxElemValidator.create('adminIp', '[管理 IP 地址] 格式错误，示例: 192.168.1.1', v => !isBlank(v) && !isIpv4(v)),
        ],
    })
})()
const validateTransient = (() => {
    const {not} = rx.CombinedPredicate,
        {isFloat} = rx.stringValidator
    const notFloat = not(isFloat)
    const gt0 = v => parseFloat(v) <= 0
    return RxFormValidator.validator({
        rxElemValidators: [
            RxElemValidator.notBlank('transientInput', '[瞬时流量进口] 不能为空'),
            RxElemValidator.notBlank('transientOutput', '[瞬时流量出口] 不能为空'),

            RxElemValidator.create('transientInput', '[瞬时流量进口] 必须为数值', notFloat),
            RxElemValidator.create('transientInput', '[瞬时流量进口] 必须大于 0', gt0),
            RxElemValidator.create('transientOutput', '[瞬时流量出口] 必须为数值', notFloat),
            RxElemValidator.create('transientOutput', '[瞬时流量出口] 必须大于 0', gt0),
        ],
    })
})()
